/**
 * @author Roger Wu
 * @version 1.0
 */
(function($){
    $.extend($.fn, {
        jPanel:function(options){
            var op = $.extend({header:"panelHeader", headerC:"panelHeaderContent", content:"panelContent", coll:"collapsable", exp:"expandable", footer:"panelFooter", footerC:"panelFooterContent"}, options);
            return this.each(function(){
                var $panel = $(this);
                var close = $panel.hasClass("close");
                var collapse = $panel.hasClass("collapse");
                
                var $content = $(">div", $panel).addClass(op.content);                
                var title = $(">h1",$panel).wrap('<div class="'+op.header+'"><div class="'+op.headerC+'"></div></div>');
                if(collapse)$("<a href=\"\"></a>").addClass(close?op.exp:op.coll).insertAfter(title);

                var header = $(">div:first", $panel);
                var footer = $('<div class="'+op.footer+'"><div class="'+op.footerC+'"></div></div>').appendTo($panel);
                
                var defaultH = $panel.attr("defH")?$panel.attr("defH"):0;
                var minH = $panel.attr("minH")?$panel.attr("minH"):0;
                if (close) 
                    $content.css({
                        height: "0px",
                        display: "none"
                    });
                else {
                    if (defaultH > 0) 
                        $content.height(defaultH + "px");
                    else if(minH > 0){
                        $content.css("minHeight", minH+"px");
                    }
                }
                if(!collapse) return;
                var $pucker = $("a", header);
                var inH = $content.innerHeight() - 6;
                if(minH > 0 && minH >= inH) defaultH = minH;
                else defaultH = inH;
                $pucker.click(function(){
                    if($pucker.hasClass(op.exp)){
                        $content.jBlindDown({to:defaultH,call:function(){
                            $pucker.removeClass(op.exp).addClass(op.coll);
                            if(minH > 0) $content.css("minHeight",minH+"px");
                        }});
                    } else { 
                        if(minH > 0) $content.css("minHeight","");
                        if(minH >= inH) $content.css("height", minH+"px");
                        $content.jBlindUp({call:function(){
                            $pucker.removeClass(op.coll).addClass(op.exp);
                        }});
                    }
                    return false;
                });
            });
        }
    });
})(jQuery);     
